package com.lfy.modules.common.custom;

import com.lfy.modules.common.domain.FileUrlVO;
import com.lfy.modules.common.domain.R;
import org.springframework.core.io.Resource;
import org.springframework.http.ResponseEntity;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
 * 文件服务
 *
 * @author <a href="https://www.lvfeiy.top">lvfeiyang</a>
 * @date 2024/5/26 14:59
 */
public interface FileService {
    /**
     * 批量上传文件
     *
     * @param multipartFile 文件
     * @param dir 文件夹路径
     * @return 文件地址
     */
     List<String> upload(MultipartFile[] multipartFile,String dir);

    /**
     * 上传文件
     *
     * @param file 文件
     * @param dir 文件夹路径
     * @return 文件地址
     */
     String uploadSingle(MultipartFile file, String dir);

    /**
     * 批量删除文件对象
     *
     * @param objects 对象名称集合
     */
     void removeFileByNames( List<String> objects);

    /**
     * 删除目录下所有文件，包括目录
     * @param dir 目录路径
     */
    void removeDir(String dir);
    /**
     * 拷贝文件
     */

    void copyFile(String source, String target);

    /**
     * 检查切片是否存在
     * @param source 文件路径
     * @return 是否存在切片
     */
    boolean checkChunk(String source);
    /**
     * 上传切片
     * @param file 文件
     * @param sourcce 文件路径
     */
    void uploadChunk(MultipartFile file, String sourcce);
    /**
     * 合并切片文件
     * @param dir 目录路径
     * @param fileName 文件名称
     * @param cutSize 切片大小
     * @param mergePath 合并后文件路径
     * @return 是否合并成功
     */
    boolean merge(String dir, String fileName, Integer cutSize, String mergePath);


    /**
     * 下载文件
     * @param name 文件名称
     * @param path 文件路径
     * @return 文件字节数组
     */
    ResponseEntity<byte[]> download(String name,String path);
    /**
     * 流式下载文件
     * @param name 文件名称
     * @param path 文件路径
     */
    void downloadToStream(String name, String path,Integer fileType, HttpServletResponse response);

    /**
     * 批量下载文件
     * TODO 异步批量实现，待查文档重构直接批量下载
     * @param params 批量下载参数
     * @return 文件字节数组集合
     */
    List<WebShareDownloadVO> batchDownload(List<BatchDownFIleParams> params);
}
